package com.atguigu.chaptar1

object Test2 {
  /**
   * 2、对数据中的元素按照指定的规则进行过滤
   * Array(1,4,7,9,10,6,8)
   * 规则: 只保留偶数数据
   * 结果: Array(4,10,6,8)
   */
  def main(args: Array[String]): Unit = {
    val arr = Array(1,4,7,9,10,6,8)
    //3.传入方法获取结果
    println(ouShu(arr, func).toList)
    //func值传递的终极版
    println(ouShu(arr,_%2!=0).toList)
  }
  //1.定义高阶函数,确认func操作什么类型参数,返回什么类型结果
  //这一题想只保留偶数数据,外界需要进行规则判断,所以需要func在这里返回布尔值
  def ouShu(arr:Array[Int],func:(Int)=>Boolean)={
    //循环取值封装进func,注意这里如果不用守卫会导致yield结果集有()元素,因为不满足func判断会返回()
    //使用守卫则如果yield里面为true才会执行a;
    for(a<-arr if(func(a)))yield{a}
  }
  //2.外界定义func规则
  val func = (x:Int)=>x%2==0


}
